package Panaderia;

import Tipos.Buffer;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.MulticastSocket;
import java.util.logging.Level;
import java.util.logging.Logger;
import Tipos.Mensaje;
import Tipos.TipoMensaje;
import Tipos.UbicacionPanaderia;

public class PanaderoEscuchadorUDP extends Thread {
    private MulticastSocket socketUDP;
    private UbicacionPanaderia direccionSucursal;
    private Buffer peticionesProcesador;
    private Buffer peticionesMostrador;
    private boolean cerrar;

    public PanaderoEscuchadorUDP(MulticastSocket socketUDP, UbicacionPanaderia direccionSucursal, Buffer peticionesProcesador, Buffer peticionesMostrador) {
        this.socketUDP = socketUDP;
        this.direccionSucursal = direccionSucursal;
        this.peticionesProcesador = peticionesProcesador;
        this.peticionesMostrador = peticionesMostrador;
        this.cerrar = false;
    }
    
    public void cerrar(boolean cerrar){
        this.cerrar = cerrar;
    }
     
    
    /*
     * El panadero que escucha a las panaderias encola los mensajes
     * en dos colas distintas: si el emisor del mensaje es la panaderia 
     * corriente entonces los mensajes son colocados en la cola del mostrador, 
     * caso contrario los mensajes son colocados en  la cola del procesador.
     * 
     */
    @Override
    public void run() {
	try {
            while(!cerrar){
                byte[] buf = new byte[1000];
                DatagramPacket recv = new DatagramPacket(buf, buf.length);
                socketUDP.receive(recv);
                String datos = new String(recv.getData());
               // System.out.println("recibido: " + datos);
                Mensaje mensRecivido = new Mensaje(datos);
                //System.out.println("PanaderoEscuchadorUDP ------------------------------> recibe dato: \n" + mensRecivido.toString()+"\n");
                //System.out.println("PanaderoEscuchadorUDP--------------------> direccion Sucursal: " + direccionSucursal);
                
                if(direccionSucursal.equals(mensRecivido.getIniciador())){
                    if(!direccionSucursal.equals(mensRecivido.getEmisor()))
                        peticionesMostrador.put(mensRecivido);
                    else{ 
                        if(mensRecivido.getMensajePanaderia() == TipoMensaje.PANADERIA_CERRADA){
                            System.out.println("PanaderoEscuchadorUDP, recibido: PANADERIA_CERRADA");
                            break;
                        }
                    }
                }
                else{
                    if (mensRecivido.getMensajePanaderia() != TipoMensaje.PANADERIA_CERRADA)
                        peticionesProcesador.put(mensRecivido);
                }
            }
            
	} catch (IOException ex) {
            String error = "Error de entrada salida";
            Logger.getLogger(PanaderoEscuchadorUDP.class.getName()).log(Level.SEVERE, error, ex);
        }
	
    }
}

